<?php

/**
 * asignarcitas actions.
 *
 * @package    atenea
 * @subpackage asignarcitas
 * @author     Your name here
 * @version    SVN: $Id: actions.class.php 2288 2006-10-02 15:22:13Z fabien $
 */
class asignarcitasActions extends autoasignarcitasActions
{
  public function executeIndex()
  {
    //return $this->forward('asignarcitas', 'list');
    
    $this->getAcceso('Ingreso a asignar citas');
  }
  
  public function executeDatos()
	{
		$this->getAcceso('Consulto un estudiante');

	  if ($this->getRequestParameter('ajax')=='1')
	    {
               		$objEstudiante = new Estudiante();
         			$this->ced = $this->getRequestParameter('cedula');
         			$datos = $objEstudiante->getDatosDelEstudianteConCed($this->ced);
         			$this->estudiante =$datos;


         			if ($datos == null)
         			{

         				$this->setFlash('notice', 'Esta cedula no le pertenece a un estudiante');

         			}
         			else
         			{

						$objUsu = $datos->getObjAteneaUsuarioConCed();
						$this->usuario = $objUsu;
						$this->getUser()->setAttribute('idSol', $objUsu->getId());

         			}

	    }
	}


  public function executeEspecialistas()
	{
	  if ($this->getRequestParameter('ajax')=='1')
	    {

	    	$objsDatoPersonal = new DatoPersonal();
            $this->especialistas = $objsDatoPersonal->getObjsUsuariosConUnRolId($this->rol);

	    }
	}

  public function executeTurno()
	{
	  if ($this->getRequestParameter('ajax')=='1')
	    {
		 //Se toma el id de usuario en sesion
		 $this->getUser()->getAttribute('esp');
         $objsDatoPersonal = new DatoPersonal();

         $this->turnos = $objsDatoPersonal->getObjsTurnosDeUnUsuarioId($this->idEspecialista);
         $objUsu = AteneausuarioPeer::retrieveByPk($this->idEspecialista);
         $this->rol = $objUsu->getRol();


    	}
    }

  public function executeHoras()
	{
	  if ($this->getRequestParameter('ajax')=='1')
	    {

         $objsCita = new Cita();
         //$usu = $this->getRequestParameter('especialista');
         $usu = $this->getUser()->getAttribute('idsesion');
         $fec = $this->getRequestParameter('fech');
         $tur = $this->getRequestParameter('turno');
         $hor = $this->getRequestParameter('bloque');
         // echo 'u-'.$usu.'-f-'.$fec.'-t-'.$tur;
         $this->horas = $objsCita->getObjsBloquesDisponiblesDeEspecialista($usu,$fec,$tur);

    }
    }

  public function executeRegistro()
    {

    }

  public function executeSolicitar()
    {

    }

  public function executeAsignar()
    {

    }

  public function executeList()
  {
    $this->processSort();

    $this->processFilters();


    // pager
    $this->pager = new sfPropelPager('Cita', 20);
    $c = new Criteria();
    $this->addSortCriteria($c);
    $this->addFiltersCriteria($c);
    $this->pager->setCriteria($c);
    $this->pager->setPage($this->getRequestParameter('page', 1));
    $this->pager->init();
  }

  public function executeCreate()
  {
    return $this->forward('asignarcitas', 'edit');
  }

  public function executeSave()
  {
    return $this->forward('asignarcitas', 'edit');
  }

  public function executeEdit()
  {
  	$this->getAcceso('Registro una cita');

    $this->cita = $this->getCitaOrCreate();

    if ($this->getRequest()->getMethod() == sfRequest::POST)
    {
      $this->updateCitaFromRequest();

      $this->saveCita($this->cita);

      $this->setFlash('notice', 'La cita ha sido programada');

      if ($this->getRequestParameter('save_and_add'))
      {
        return $this->redirect('asignarcitas/create');
      }
      else if ($this->getRequestParameter('save_and_list'))
      {
        return $this->redirect('asignarcitas/list');
      }
      else
      {
        return $this->redirect('asignarcitas/edit?id='.$this->cita->getId());
      }
    }
    else
    {
      $this->labels = $this->getLabels();
    }

    return $this->redirect('asignarcitas/index');

  }

  public function executeDelete()
  {
    $this->cita = CitaPeer::retrieveByPk($this->getRequestParameter('id'));
    $this->forward404Unless($this->cita);

    try
    {
      $this->deleteCita($this->cita);
    }
    catch (PropelException $e)
    {
      $this->getRequest()->setError('delete', 'Could not delete the selected Cita. Make sure it does not have any associated items.');
      return $this->forward('asignarcitas', 'list');
    }

    return $this->redirect('asignarcitas/list');
  }

  public function handleErrorEdit()
  {
    $this->preExecute();
    $this->cita = $this->getCitaOrCreate();
    $this->updateCitaFromRequest();

    $this->labels = $this->getLabels();

    return sfView::SUCCESS;
  }

  protected function saveCita($cita)
  {
    $cita->save();

  }

  protected function deleteCita($cita)
  {
    $cita->delete();
  }

  protected function updateCitaFromRequest()
  {
    $cita = $this->getRequestParameter('cita');

    $cita['fecha']           = $this->getRequestParameter('fech');
    $cita['turno_id']        = $this->getRequestParameter('turno');
    $cita['especialista_id'] = $this->getRequestParameter('especialista_id');
    $cita['tipo_cita']       = $this->getRequestParameter('tipo');
    $cita['motivo']          = $this->getRequestParameter('motivo');
    $cita['bloque_id']       = $this->getRequestParameter('bloque');
    echo $cita['bloque_id'];    
    // $cita['bloque_id'] = 7;
    $idU = $this->getUser()->getAttribute('idSol');
    $this->getUser()->getAttributeHolder()->remove('idSol');

    if (isset($cita['fecha']))
    {
      if ($cita['fecha'])
      {
        try
        {
          $dateFormat = new sfDateFormat($this->getUser()->getCulture());
                              if (!is_array($cita['fecha']))
          {
            $value = $dateFormat->format($cita['fecha'], 'i', $dateFormat->getInputPattern('d'));
          }
          else
          {
            $value_array = $cita['fecha'];
            $value = $value_array['year'].'-'.$value_array['month'].'-'.$value_array['day'].(isset($value_array['hour']) ? ' '.$value_array['hour'].':'.$value_array['minute'].(isset($value_array['second']) ? ':'.$value_array['second'] : '') : '');
          }
          $this->cita->setFecha($value);
        }
        catch (sfException $e)
        {
          // not a date
        }
      }
      else
      {
        $this->cita->setFecha(null);
      }
    }

    if (!$cita['turno_id'])
    {
    	$this->setFlash('notice', 'Debe ingresar un Tuno para la cita');
     	$this->redirect('asignarcitas/index');
    }
   	else
   	{
  		if (isset($cita['turno_id']))
   		{
   		$this->cita->setTurnoId($cita['turno_id'] ? $cita['turno_id'] : null);
    	}
    }
    $this->cita->setEspecialistaId($cita['especialista_id']);

    if (!$idU){
	 $this->setFlash('notice', 'Debe ingresar ingresar una cedula de estudiante correcta');
     $this->redirect('asignarcitas/index');
    }
    else{
    $this->cita->setSolicitanteId($idU);
    }

    if (isset($cita['tipo_cita']))
    {
      $this->cita->setTipoCita($cita['tipo_cita']);
    }
    if (isset($cita['motivo']))
    {
      $this->cita->setMotivo($cita['motivo']);
    }
    if (!$cita['bloque_id'])
    {
    	$this->setFlash('notice', 'Debe ingresar una hora para la cita');
     	$this->redirect('asignarcitas/index');
    }
   	else
   	{
      if (isset($cita['bloque_id']))
      {
      $this->cita->setBloqueId($cita['bloque_id'] ? $cita['bloque_id'] : null);
      }
    }
  }

  protected function getCitaOrCreate($id = 'id')
  {
    if (!$this->getRequestParameter($id))
    {
      $cita = new Cita();
    }
    else
    {
      $cita = CitaPeer::retrieveByPk($this->getRequestParameter($id));

      $this->forward404Unless($cita);
    }

    return $cita;
  }

  protected function processFilters()
  {
  }

  protected function processSort()
  {
    if ($this->getRequestParameter('sort'))
    {
      $this->getUser()->setAttribute('sort', $this->getRequestParameter('sort'), 'sf_admin/cita/sort');
      $this->getUser()->setAttribute('type', $this->getRequestParameter('type', 'asc'), 'sf_admin/cita/sort');
    }

    if (!$this->getUser()->getAttribute('sort', null, 'sf_admin/cita/sort'))
    {
    }
  }

  protected function addFiltersCriteria($c)
  {
  }

  protected function addSortCriteria($c)
  {
    if ($sort_column = $this->getUser()->getAttribute('sort', null, 'sf_admin/cita/sort'))
    {
      $sort_column = CitaPeer::translateFieldName($sort_column, BasePeer::TYPE_FIELDNAME, BasePeer::TYPE_COLNAME);
      if ($this->getUser()->getAttribute('type', null, 'sf_admin/cita/sort') == 'asc')
      {
        $c->addAscendingOrderByColumn($sort_column);
      }
      else
      {
        $c->addDescendingOrderByColumn($sort_column);
      }
    }
  }

  protected function getLabels()
  {
    return array(
      'cita{id}' => 'Id:',
      'cita{fecha}' => 'Fecha:',
      'cita{turno_id}' => 'Turno:',
      'cita{especialista_id}' => 'Especialista:',
      'cita{solicitante_id}' => 'Solicitante:',
      'cita{tipo_cita}' => 'Tipo cita:',
      'cita{motivo}' => 'Motivo:',
      'cita{bloque_id}' => 'Bloque:',
    );
  }
}
